package com.admin.system.modules.system.service;

import com.admin.core.dto.MenuQueryDTO;
import com.admin.core.entity.SysMenu;
import com.baomidou.mybatisplus.extension.service.IService;
import reactor.util.annotation.Nullable;

import java.util.List;
import java.util.Set;

/**
 * @author sq-lan
 */
public interface MenuService extends IService<SysMenu> {

    /**
     * 查询数据
     *
     * @param dto 条件
     * @return /
     */
    List<SysMenu> list(MenuQueryDTO dto);

    /**
     * 列出我全部
     *
     * @return {@link List}<{@link SysMenu}>
     */
    List<SysMenu> listMyAll();

    /**
     * 创建
     *
     * @param entity /
     */
    void add(SysMenu entity);

    /**
     * 编辑
     *
     * @param entity /
     */
    void modify(SysMenu entity);

    /**
     * 获取所有子节点，包含自身ID
     *
     * @param menuList /
     * @param menuSet  /
     * @return /
     */
    Set<SysMenu> listChildAllAndSelf(List<SysMenu> menuList, Set<SysMenu> menuSet);

    /**
     * 删除
     *
     * @param menuSet /
     */
    void remove(Set<SysMenu> menuSet);

    /**
     * 根据ID获取同级与上级数据
     *
     * @param menu    /
     * @param objects /
     * @return /
     */
    List<SysMenu> listSuperior(SysMenu menu, List<SysMenu> objects);

    /**
     * 列出我的菜单 可过滤类型
     *
     * @param type /
     * @return {@link List}<{@link SysMenu}>
     */
    List<SysMenu> listMyFilterType(@Nullable Integer type);

    /**
     * 按pid列出
     * 按 MenuSort 升序
     *
     * @param pid pid
     * @return {@link List}<{@link SysMenu}>
     */
    List<SysMenu> listByPid(Integer pid);
}
